#include "w5500_drv.h"
#include "main.h"
#include "spi.h"

void *w5500Port = NULL;

/*本.c完成W5500硬件部分的驱动
需要GPIO支持
需要SPI支持
*/



/*复位：
拉低RST脚 延时2ms 再拉高 延时100ms即可*/
void w5500_drv_resert( void )
{
	HAL_GPIO_WritePin(W5500_RST_GPIO_Port, W5500_RST_Pin, GPIO_PIN_RESET);

	HAL_Delay(2);

	HAL_GPIO_WritePin(W5500_RST_GPIO_Port, W5500_RST_Pin, GPIO_PIN_SET);

	HAL_Delay(100);
}

/*使能：
就是操作SPI的片选使能和失能
*/
void w5500_chip_enable( void )
{
	  HAL_GPIO_WritePin(SPI3_CS_GPIO_Port , SPI3_CS_Pin , GPIO_PIN_RESET);
}

void w5500_chip_disable( void )
{ 
	  HAL_GPIO_WritePin(SPI3_CS_GPIO_Port , SPI3_CS_Pin , GPIO_PIN_SET);
}

/*写字节；
就是操作SPI发送一个HEX
*/
void w5500_write_byte( uint8_t byte)
{
	uint8_t d_read,d_send=byte;
  if(HAL_SPI_TransmitReceive(&hspi3,&d_send,&d_read,1,0xFFFFFF)!=HAL_OK)
    d_read=0XFF;    
}


/*读字节；
就是操作SPI发送一个0XFF然后同步接收到的那个HEX
*/
uint8_t w5500_read_byte( void )
{
	 uint8_t d_read,d_send=0XFF;
   if(HAL_SPI_TransmitReceive(&hspi3,&d_send,&d_read,1,0xFFFFFF)!=HAL_OK)
    d_read=0XFF;

  return d_read;  
}

/*加锁；
关闭全局中断
*/
void w5500_mutex_enter(void)
{	
    __set_PRIMASK(1);  
}
/*解锁；
开启全局中断
*/
void w5500_mutex_exit(void)
{
    __set_PRIMASK(0);
}



//SPI对接-初始化-已经好了
//复位脚输出高--已经好了
//SPI片选脚
void w5500_drv_init( void )
{
    w5500Port = &hspi3;
    
	  HAL_GPIO_WritePin(W5500_RST_GPIO_Port, W5500_RST_Pin, GPIO_PIN_SET);   
}
